/*********************************************************
 * 初学之家(http://www.g2room.com)，提供Java、Javascript（js）、Jquery、
 * 等一些工具或常用功能的实现例子代码，希望能给初学者提供学习和工作上的帮助，
 * 也希望有想提供源代码的朋友能联系我，一起努力，提供更多、更全面、更详细的
 * 一些初学代码例子及经验，帮助更多的人。
 * 
 * 我的联系方式：E-Mail：g2room@163.com
 * 网址：http://www.g2room.com
 * QQ：天涯（1173930590）
 * QQ交流群：323642758
 * 
 * 本站内容为提供各种java、javascript(JS)常用的工具源代码、实例（示例）、
 * 基本配置、教程、手册等；目前Java代码提供的工具（或转换）例子代码如下：
 * BASE64转换工具、bytes相关操作、email收发、文件操作（读写、拷贝、遍历、
 * 多线程copy等）、json格式转换、日志（Log4j）操作工具、Lucene搜索引擎的
 * 创建索引和搜索、各种不同Map的使用、定时器（Quartz）的使用例子、Socket的
 * 连接传输数据例子、WebService的例子及一些常用的工具类如String、Date及
 * JDK自带的一些工具类及函数的使用例子。
 * 
 * 说明：如需直接使用本站的例子代码，请保留此说明
 * 
 ********************************************************/
package com.g2room.utils;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * java日期类型操作工具类。String类型和Date类型的互相转换。
 *
 * @createTime: Jun 19, 2013 1:40:57 PM
 * @author: <a href="mailto:g2room@163.com">天涯</a>
 * @version: 0.1
 * @lastVersion: 0.1
 * @updateTime: 
 * @updateAuthor: <a href="mailto:g2room@163.com">天涯</a>
 * @changesSum: 
 * 
 */
public class DateUtil {

	/**
	 * 获取yyyy-mm-dd hh:mm:ss的日期格式化对象
	 *
	 * @return {SimpleDateFormat} SimpleDateFormat实例对象
	 * @auther <a href="mailto:g2room@163.com">天涯</a>
	 * Jun 19, 2013 1:47:36 PM
	 */
	public static SimpleDateFormat dateFormat(){
		return DateUtil.dateFormat("yyyy-MM-dd HH:mm:ss");
	}
	/**
	 * 获取日期格式化对象
	 *
	 * @param {String} format 时间格式:<br>
	 * 		1、yyyy-MM-dd HH:mm:ss<br>
	 * 		2、yyyy-MM-dd<br>
	 * 		3、MM/dd/yyyy HH:mm:ss a<br>
	 * 		4、yyyy-MM-dd HH:mm:ss a<br>
	 * 		5、yyyy-MM-dd'T'HH:mm:ss'Z'<br>
	 * 		6、yyyy-MM-dd'T'HH:mm:ssZ<br>
	 * 		7、yyyy-MM-dd'T'HH:mm:ssz<br>
	 * 第5、6、7为ISO格式日期，也可以根据规则自定义格式
	 * 
	 * @return {SimpleDateFormat} SimpleDateFormat实例对象
	 * @auther <a href="mailto:g2room@163.com">天涯</a>
	 * Jun 19, 2013 1:47:36 PM
	 */
	public static SimpleDateFormat dateFormat(String format){
		return new SimpleDateFormat(format);
	}
	
	/**
	 * 
	 * 把日期转换为String，如果format参数为空，则转换为：yyyy-MM-dd HH:mm:ss格式
	 *
	 * @param {Date} date	需要转换的日期类实例
	 * @param {String} format	转换的日期格式:<br>
	 * 		1、yyyy-MM-dd HH:mm:ss<br>
	 * 		2、yyyy-MM-dd<br>
	 * 		3、MM/dd/yyyy HH:mm:ss a<br>
	 * 		4、yyyy-MM-dd HH:mm:ss a<br>
	 * 		5、yyyy-MM-dd'T'HH:mm:ss'Z'<br>
	 * 		6、yyyy-MM-dd'T'HH:mm:ssZ<br>
	 * 		7、yyyy-MM-dd'T'HH:mm:ssz<br>
	 * 第5、6、7为ISO格式日期
	 * 
	 * @return {String} 转换后的字符类型的日期
	 * @auther <a href="mailto:g2room@163.com">天涯</a>
	 * Jun 19, 2013 1:56:30 PM
	 */
	public static String date2String(Date date, String format){
		SimpleDateFormat sdf;
		if(StringUtil.isNotEmpty(format)) {
			sdf = dateFormat(format);
		} else {
			sdf = dateFormat();
		}
		return sdf.format(date);
	}
	
	/**
	 * String类型的日期转换为Date类型
	 *
	 * @param {String} dateStr 字符串格式的日期，如2013-06-19 13:11:22
	 * @param {String} format	字符串日期的格式化类型，如上例子则为：yyyy-MM-dd HH:mm:ss
	 * @return {Date} 转换后的Date对象
	 * @throws ParseException 
	 * @auther <a href="mailto:g2room@163.com">天涯</a>
	 * Jun 19, 2013 3:20:22 PM
	 */
	public static Date string2Date(String dateStr, String format) throws ParseException{
		SimpleDateFormat sdf;
		if(StringUtil.isNotEmpty(format)) {
			sdf = dateFormat(format);
		} else {
			sdf = dateFormat();
		}
		return sdf.parse(dateStr);
	}
	
	/**
	 * String类型的日期转换为Date类型，格式为yyyy-MM-dd
	 *
	 * @param {String} dateStr 字符串格式的日期，如2013-06-19
	 * @return {Date} 转换后的Date对象
	 * @throws ParseException 
	 * @auther <a href="mailto:g2room@163.com">天涯</a>
	 * Jun 19, 2013 3:20:22 PM
	 */
	public static Date string2Date(String dateStr) throws ParseException{
		return string2Date(dateStr, "yyyy-MM-dd");
	}
	
	public static void main(String[] args) {
		String format = "yyyy-MM-dd";
//		String format = "";
		String dateStr = DateUtil.date2String(new Date(), format);
		System.out.println(dateStr);
		try {
			System.out.println(DateUtil.string2Date(dateStr, format));
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}